package com.hyper_yang.javase.collections.generics;

import com.hyper_yang.javase.collections.generics.utils.ListUtil;
import com.hyper_yang.javase.collections.pojo.Student;

import java.util.ArrayList;
import java.util.Iterator;

public class Generics {
    /* (伪)泛型 JDK 5 引入; 格式: <Type>; 仅支持引用数据类型，指定泛型的具体类型之后，传递数据时可以传递该类类型及其子类型，不写泛型默认是Object
            优点: 统一数据类型，把运行时问题提前到了编译期, 编译成.class文件时会擦除
            使用场景: 类中某个变量的数据类型不确定时，定义带有泛型的类
     */
    public static void main(String[] args) {
        // 没有泛型，集合存储数据
        ArrayList arrayList = new ArrayList();
        arrayList.add(123);
        arrayList.add("aaa");
        arrayList.add(new Student("zhangsan",123));

        Iterator iterator = arrayList.iterator();
        while (iterator.hasNext()) {
            Object obj = iterator.next();
            // 多态的弊端是不能访问子类特有的功能 即 不能 obj.length()
            System.out.println(obj);
        }

        MyArrayList<String> myArrayList = new MyArrayList<>();
        myArrayList.add("a");
        myArrayList.add("b");
        myArrayList.add("c");
        System.out.println(myArrayList);

        ArrayList<String> list = new ArrayList<>();
        ArrayList<Integer> list2 = new ArrayList<>();

        ListUtil.addAll(list,"a","b");
        ListUtil.addAll(list2,111,222);

        System.out.println(list);
        System.out.println(list2);
    }
}
